﻿// System libraries
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

// Created libraries
using FrbaBus.Core;


namespace FrbaBus.Login
{
    public partial class Login : Form
    {
        

        public Login()
        {
            InitializeComponent();
        }
        public static string usuariovalor = "";
        private void confirmarLogin_Click(object sender, EventArgs e)
        {
            
            //Inicializo el objeto para hashear
            Hash hs = new Hash();
            //Inicializo y abro la conexion a la base
            DBManager db = new DBManager();
            
            
            if (usuario.Text == "" || password.Text == "")
            {
                MessageBox.Show("Faltan datos");
                return;
            }

            
            SqlConnection conn = db.getConnection();
 
            //Seteo los parametros. El de retorno se agrega internamente en paramSet
            ParamSet ps = new ParamSet("ALL_IN.ControlIntentosFallidos");
                       //Parametros
            ps.AddParameter("@user", usuario.Text);
            ps.AddParameter("@pass", hs.getHashSha256(password.Text));
                      

                        // guardo el valor de retorno del procedure (delego al motor que se fije si existe el usuario)
                        SqlParameter retval = ps.execSP();
  
            switch (retval.Value.ToString())
            {
                case "0":


                    SqlCommand consulta = new SqlCommand("SELECT rol FROM ALL_IN.usuario WHERE userId=@username AND pass=@pass");
                    consulta.Parameters.AddWithValue("username", usuario.Text);
                    consulta.Parameters.AddWithValue("pass", hs.getHashSha256(password.Text));
                    //DBManager manager = new DBManager();
                    //SQLResponse r = manager.executeQuery(consulta);
                    SQLResponse r = db.executeQuery(consulta);
                    Session s = new Session();

                    //dejo guardado el rol y el username, si se necesita para otra cosa aca lo tienen
                    s.username = usuario.Text;
                    usuariovalor = s.username;
                    s.rol = (String)r.result.Rows[0][0];
                    db.desconectar();
                    this.Close();
                    break;
         

                case "1": MessageBox.Show("La contraseña no es válida");
                    break;

                case "2": MessageBox.Show("Se ha inhabilitado al usuario por intentos fallidos");
                    break;

                case "3": MessageBox.Show("Usuario incorrecto");
                    break;

                case "4": MessageBox.Show("Usted se encuentra inhabilitado, hable con un administrador");
                    break;
            }
       
        }


        private void password_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                this.confirmarLogin_Click(sender, null);
            }
        }

        private void Login_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            Session s = new Session();

            s.username = "Cliente";
            s.rol = "Cliente";
            usuariovalor = s.username;
            this.Close();
           
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Visible = true;
            label2.Visible = true;
            usuario.Visible = true;
            password.Visible = true;
            confirmarLogin.Visible = true;
            Cerrar.Visible = true;
        }

        private void password_TextChanged(object sender, EventArgs e)
        {
           
            password.UseSystemPasswordChar = true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Login.usuariovalor = "";
            this.Close();
        }
       
    }
}
